// 版权所有 Epic Games, Inc. 保留所有权利。

#include "LyraActorUtilities.h"

#include "GameFramework/Actor.h"

#include UE_INLINE_GENERATED_CPP_BY_NAME(LyraActorUtilities)

/**
 * 切换网络模式
 */
EBlueprintExposedNetMode ULyraActorUtilities::SwitchOnNetMode(const UObject* WorldContextObject)
{
	ENetMode NetMode = NM_Standalone; // 默认独立模式
	for (const UObject* TestObject = WorldContextObject; TestObject != nullptr; TestObject = TestObject->GetOuter()) // 遍历外部对象
	{
		if (const UActorComponent* Component = Cast<const UActorComponent>(WorldContextObject)) // 检查是否为组件
		{
			NetMode = Component->GetNetMode(); // 获取组件网络模式
			break;
		}
		else if (const AActor* Actor = Cast<const AActor>(WorldContextObject)) // 检查是否为角色
		{
			NetMode = Actor->GetNetMode(); // 获取角色网络模式
			break;
		}
	}

	switch (NetMode) // 根据网络模式返回对应的枚举值
	{
	case NM_Client:
		return EBlueprintExposedNetMode::Client; // 客户端
	case NM_Standalone:
		return EBlueprintExposedNetMode::Standalone; // 独立模式
	case NM_DedicatedServer:
		return EBlueprintExposedNetMode::DedicatedServer; // 专用服务器
	case NM_ListenServer:
		return EBlueprintExposedNetMode::ListenServer; // 监听服务器
	default:
		ensure(false); // 确保不会执行到默认情况
		return EBlueprintExposedNetMode::Standalone; // 默认返回独立模式
	}
}